package api

import (
	"pids-cloud-server/app/common"
	"pids-cloud-server/app/middleware"
	"pids-cloud-server/entity"
	"pids-cloud-server/utils"

	"github.com/gin-gonic/gin"
)

// GetRedisList 获取Redis信息列表
// @Summary 获取Redis信息列表
// @Description 获取Redis信息列表，支持分页和条件筛选
// @Tags Redis信息
// @Accept json
// @Produce json
// @Param page query int false "页码，默认1"
// @Param pageSize query int false "每页大小，默认10"
// @Param ip query string false "IP地址"
// @Param enable query string false "启用状态(0:禁用,1:启用)"
// @Success 200 {object} common.Result{data=common.PageResult{list=[]entity.RedisInfo}} "成功"
// @Failure 500 {object} common.Result "失败"
// @Router /redis/list [get]
func GetRedisList(c *gin.Context) {
	// 从上下文中获取分页参数
	pagination, _ := c.Get("pagination")
	paging := pagination.(*middleware.PaginationParams)

	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	ip := c.Query("ip")
	enable := c.Query("enable")

	query := db.Model(&entity.RedisInfo{})
	if ip != "" {
		query = query.Where("ip LIKE ?", "%"+ip+"%")
	}
	if enable != "" {
		query = query.Where("enable = ?", enable)
	}

	// 获取总记录数
	var total int64
	if err := query.Count(&total).Error; err != nil {
		common.ErrorResponse(c, 500, "查询失败")
		return
	}

	// 获取分页数据
	var redisList []entity.RedisInfo
	if err := query.Offset((paging.Page - 1) * paging.PageSize).Limit(paging.PageSize).Find(&redisList).Error; err != nil {
		common.ErrorResponse(c, 500, "查询失败")
		return
	}

	common.SuccessPageResponse(c, redisList, total, paging.Page, paging.PageSize)
}

// AddRedisInfo 新增Redis信息
// @Summary 新增Redis信息
// @Description 新增一条Redis信息
// @Tags Redis信息
// @Accept json
// @Produce json
// @Param redisInfo body entity.RedisInfo true "Redis信息"
// @Success 200 {object} common.Result{data=entity.RedisInfo} "成功"
// @Failure 400 {object} common.Result "参数错误"
// @Failure 500 {object} common.Result "新增失败"
// @Router /redis/add [post]
func AddRedisInfo(c *gin.Context) {
	var redisInfo entity.RedisInfo
	if err := c.ShouldBindJSON(&redisInfo); err != nil {
		common.ErrorResponse(c, 400, "参数错误")
		return
	}

	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	if err := db.Create(&redisInfo).Error; err != nil {
		common.ErrorResponse(c, 500, "新增失败")
		return
	}
	common.SuccessResponse(c, redisInfo)
}

// UpdateRedisInfo 更新Redis信息
// @Summary 更新Redis信息
// @Description 更新Redis信息
// @Tags Redis信息
// @Accept json
// @Produce json
// @Param redisInfo body entity.RedisInfo true "Redis信息"
// @Success 200 {object} common.Result "成功"
// @Failure 400 {object} common.Result "参数错误"
// @Failure 500 {object} common.Result "更新失败"
// @Router /redis/update [put]
func UpdateRedisInfo(c *gin.Context) {
	var redisInfo entity.RedisInfo
	if err := c.ShouldBindJSON(&redisInfo); err != nil {
		common.ErrorResponse(c, 400, "参数错误")
		return
	}

	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	if err := db.Model(&entity.RedisInfo{}).Where("id = ?", redisInfo.ID).Updates(redisInfo).Error; err != nil {
		common.ErrorResponse(c, 500, "更新失败")
		return
	}
	common.SuccessResponse(c, nil)
}

// DeleteRedisInfo 删除Redis信息
// @Summary 删除Redis信息
// @Description 根据ID删除Redis信息
// @Tags Redis信息
// @Accept json
// @Produce json
// @Param id path string true "Redis信息ID"
// @Success 200 {object} common.Result "成功"
// @Failure 500 {object} common.Result "删除失败"
// @Router /redis/delete/{id} [delete]
func DeleteRedisInfo(c *gin.Context) {
	id := c.Param("id")
	db := utils.GetDB()
	if db == nil {
		common.ErrorResponse(c, 500, "数据库连接失败")
		return
	}
	if err := db.Delete(&entity.RedisInfo{}, id).Error; err != nil {
		common.ErrorResponse(c, 500, "删除失败")
		return
	}
	common.SuccessResponse(c, nil)
}
